package com.kalaqia.im.library;

import android.app.ActivityManager;
import android.app.Application;
import android.app.IntentService;
import android.content.Context;

import com.hyphenate.chat.EMClient;
import com.hyphenate.chat.EMOptions;

import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;

import java.util.Iterator;
import java.util.List;

import static android.content.Context.ACTIVITY_SERVICE;


/**
 * 功能:环信初始化
 * 项目名称:kalaqia
 * 类描述:
 * 创建人:kalaqia 421407393@qq.com
 * 创建时间:2017/7/28 10:00
 * 修改人:kalaqia  421407393@qq.com
 * 修改时间:2017/7/28 10:00
 * 修改备注:
 */
@Aspect
public class EaseMobInit {

    /**
     * 在application中初始化组
     */
    @Pointcut("call(* com.kalaqia.df.InitializeService.performInit(..))")
    public void cutEaseMob() {

    }

    @After("cutEaseMob()")
    public void initEaseMob(JoinPoint joinPoint) throws Throwable {
        init(((IntentService) joinPoint.getTarget()).getApplication());
    }

    /**
     * 环信即时通讯环境初始化
     *
     * @param app 当前应用环境
     */
    public boolean init(Application app) {
        Context applicationContext = app.getApplicationContext();
        int pid = android.os.Process.myPid();
        String processAppName = getAppName(pid, app);
        // 如果APP启用了远程的service，此application:onCreate会被调用2次
        // 为了防止环信SDK被初始化2次，加此判断会保证SDK被初始化1次
        // 默认的APP会在以包名为默认的process name下运行，如果查到的process name不是APP的process name就立即返回
        if (processAppName == null || !processAppName.equalsIgnoreCase(applicationContext.getPackageName())) {
            // 则此application::onCreate 是被service 调用的，直接返回
            return false;
        }
        init(applicationContext);
        return true;
    }

    /**
     * 环信即时通讯环境初始化
     * @param applicationContext 当前应用环境上下文
     */
    public void init(Context applicationContext) {
        EMOptions options = new EMOptions();
        // 默认添加好友时，是不需要验证的，改成需要验证
        options.setAcceptInvitationAlways(false);
        //初始化
        EMClient.getInstance().init(applicationContext, options);
        //在做打包混淆时，关闭debug模式，避免消耗不必要的资源
        EMClient.getInstance().setDebugMode(true);
    }

    private String getAppName(int pID, Application app) {
        ActivityManager am = (ActivityManager) app.getSystemService(ACTIVITY_SERVICE);
        List l = am.getRunningAppProcesses();
        Iterator i = l.iterator();
        while (i.hasNext()) {
            ActivityManager.RunningAppProcessInfo info = (ActivityManager.RunningAppProcessInfo) (i.next());
            try {
                if (info.pid == pID) {
                    return info.processName;
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        return null;
    }


}
